import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:nyh_motorcade_app/constant/constant.dart';
import 'package:nyh_motorcade_app/entity/driver_info_entity.dart';
import 'package:nyh_motorcade_app/pages/vehicle_manage/vehicle_details/vehicle_details_controller.dart';
import 'package:nyh_motorcade_app/styles/colors.dart';
import 'package:nyh_motorcade_app/utils/format_utils.dart';
import 'package:nyh_motorcade_app/widgets/custom_app_bar.dart';
import 'package:nyh_motorcade_app/widgets/flexible_icon_text.dart';
import 'package:nyh_motorcade_app/widgets/multi_state/default_empty_widget.dart';
import 'package:nyh_motorcade_app/widgets/multi_state/default_error_widget.dart';
import 'package:nyh_motorcade_app/widgets/multi_state/default_fail_widget.dart';
import 'package:nyh_motorcade_app/widgets/multi_state/default_loading_widget.dart';
import 'package:nyh_motorcade_app/widgets/multi_state/multi_state_widget.dart';
import 'package:nyh_motorcade_app/widgets/text_button_with_icon.dart';
import 'package:nyh_motorcade_app/widgets/text_with_icon.dart';
import 'package:nyh_motorcade_app/widgets/vehicle_icon.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';

class VehicleDetailsPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    String tag = DateTime.now().millisecondsSinceEpoch.toString();
    final controller = Get.put(VehicleDetailsController(), tag: tag);
    return Scaffold(
      backgroundColor: Colours.color_background,
      appBar: CustomAppBar(
        context: context,
        title: "车辆详情",
        actions: [
          IconButton(
            onPressed: () {
              controller.goBackHomePage();
            },
            icon: Image.asset("images/ic_back_home.png"),
          ),
        ],
      ),
      body: GetBuilder<VehicleDetailsController>(
        tag: tag,
        builder: (controller) {
          return MultiStateWidget(
            child: SmartRefresher(
              controller: controller.refreshController,
              enablePullDown: true,
              enablePullUp: true,
              onRefresh: controller.onRefresh,
              onLoading: controller.onLoading,
              child: CustomScrollView(
                slivers: [
                  buildHeaderWidget(controller),
                  buildOrderCountWidget(controller),
                  buildContentWidget(controller),
                ],
              ),
            ),
            state: controller.state,
            onRetry: () {
              controller.onRetryAll();
            },
          );
        },
      ),
      floatingActionButton: GestureDetector(
        onTap: () {
          controller.goToBindDriverPage();
        },
        child: Image.asset("images/ic_bind_circle.png"),
      ),
    );
  }

  Widget buildHeaderWidget(VehicleDetailsController controller) {
    List<String> quotaList = [];
    if (controller.entity?.refuelQuota != null) {
      quotaList.add("限额：${FormatUtils.formatMoney(controller.entity?.refuelQuota)}${controller.entity?.unitName ?? ""}/${controller.entity?.circleName ?? ""}");
    }
    if (controller.entity?.remainQuota != null) {
      quotaList.add("剩余：${FormatUtils.formatMoney(controller.entity?.remainQuota)}${controller.entity?.unitName ?? ""}/${controller.entity?.circleName ?? ""}");
    }
    return SliverToBoxAdapter(
      child: Container(
        margin: EdgeInsets.only(left: 16.w, top: 12.w, right: 16.w),
        decoration: BoxDecoration(
          color: Colours.color_white,
          borderRadius: BorderRadius.circular(10.w),
        ),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Padding(
              padding: EdgeInsets.symmetric(
                vertical: 13.w,
                horizontal: 16.w,
              ),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Row(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      VehicleIcon(controller.entity?.type ?? "", controller.entity?.vehicleNumber ?? ""),
                      SizedBox(
                        width: 16.w,
                      ),
                      Expanded(
                        child: Column(
                          crossAxisAlignment: CrossAxisAlignment.start,
                          children: [
                            Row(
                              children: [
                                Expanded(
                                  child: Row(
                                    children: [
                                      Flexible(
                                        child: Text(
                                          controller.entity?.vehicleNumber ?? "",
                                          style: TextStyle(
                                            color: Colours.color_text_theme,
                                            fontSize: 16.sp,
                                            fontWeight: FontWeight.bold,
                                          ),
                                          maxLines: 1,
                                          overflow: TextOverflow.ellipsis,
                                        ),
                                      ),
                                      Visibility(
                                        visible: (controller.entity?.belongToType ?? "").isNotEmpty,
                                        child: Container(
                                          margin: EdgeInsets.only(left: 8.w),
                                          padding: EdgeInsets.only(left: 5.w, right: 5.w, bottom: 1.w),
                                          decoration: BoxDecoration(
                                            color: (controller.entity?.belongToType ?? "") == Constant.OWN_VEHICLE ? Colours.color_34c759 : Colours.color_theme,
                                            borderRadius: BorderRadius.circular(5.w),
                                            border: Border.all(width: 1.w, color: (controller.entity?.belongToType ?? "") == Constant.OWN_VEHICLE ? Colours.color_34c759 : Colours.color_theme),
                                          ),
                                          child: Text(
                                            controller.entity?.belongToTypeName ?? "",
                                            style: TextStyle(
                                              color: Colours.color_white,
                                              fontSize: 10.sp,
                                            ),
                                          ),
                                        ),
                                      ),
                                      Visibility(
                                        visible: (controller.entity?.type ?? "").isNotEmpty,
                                        child: Container(
                                          margin: EdgeInsets.only(left: 8.w),
                                          padding: EdgeInsets.only(left: 5.w, right: 5.w, bottom: 1.w),
                                          decoration: BoxDecoration(
                                            color: Colours.color_white,
                                            borderRadius: BorderRadius.circular(5.w),
                                            border: Border.all(width: 1.w, color: Colours.color_6f7082),
                                          ),
                                          child: Text(
                                            controller.entity?.typeName ?? "",
                                            style: TextStyle(
                                              color: Colours.color_6f7082,
                                              fontSize: 10.sp,
                                            ),
                                          ),
                                        ),
                                      ),
                                      Visibility(
                                        visible: controller.entity?.status == 0,
                                        child: Container(
                                          margin: EdgeInsets.only(left: 8.w),
                                          padding: EdgeInsets.only(left: 5.w, right: 5.w, bottom: 1.w),
                                          decoration: BoxDecoration(
                                            color: Colours.color_cfcfd5,
                                            borderRadius: BorderRadius.circular(5.w),
                                            border: Border.all(width: 1.w, color: Colours.color_cfcfd5),
                                          ),
                                          child: Text(
                                            "已禁用",
                                            style: TextStyle(
                                              color: Colours.color_white,
                                              fontSize: 10.sp,
                                            ),
                                          ),
                                        ),
                                      ),
                                    ],
                                  ),
                                ),
                                SizedBox(
                                  width: 10.w,
                                ),
                                GestureDetector(
                                  behavior: HitTestBehavior.opaque,
                                  onTap: () {
                                    controller.goToEditVehicleInfoPage();
                                  },
                                  child: Padding(
                                    padding: EdgeInsets.only(left: 5.w, top: 5.w, bottom: 5.w),
                                    child: Image.asset("images/ic_edit.png"),
                                  ),
                                ),
                              ],
                            ),
                            SizedBox(
                              height: (controller.entity?.motorcadeName ?? "").isNotEmpty ? 5.w : 0,
                            ),
                            Visibility(
                              visible: (controller.entity?.motorcadeName ?? "").isNotEmpty,
                              child: TextWithIcon(
                                text: controller.entity?.motorcadeName ?? "",
                                textStyle: TextStyle(
                                  color: Colours.color_6f7082,
                                  fontSize: 12.sp,
                                ),
                                iconName: "images/ic_motorcade.png",
                                iconWidth: 14.w,
                                iconHeight: 14.w,
                                iconColor: Colours.color_6f7082,
                                textIconPadding: 5.w,
                              ),
                            ),
                          ],
                        ),
                      ),
                    ],
                  ),
                  SizedBox(
                    height: (controller.entity?.subCompanyList ?? []).isNotEmpty ? 10.w : 0,
                  ),
                  FlexibleIconText(
                    icon: Image.asset(
                      "images/ic_company.png",
                      height: 14.w,
                      width: 14.w,
                      color: Colours.color_6f7082,
                    ),
                    textList: controller.entity?.subCompanyList,
                    iconTextPadding: 5.w,
                    textStyle: TextStyle(
                      color: Colours.color_6f7082,
                      fontSize: 12.sp,
                    ),
                  ),
                  SizedBox(
                    height: 5.w,
                  ),
                  Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    crossAxisAlignment: CrossAxisAlignment.end,
                    children: [
                      Expanded(
                        child: FlexibleIconText(
                          textList: quotaList,
                          textStyle: TextStyle(color: Colours.color_text_theme, fontSize: 12.sp),
                        ),
                      ),
                      SizedBox(
                        width: 10.w,
                      ),
                      TextButton(
                        onPressed: () {
                          controller.goToTransactionFlowPage();
                        },
                        child: Text(
                          "交易流水",
                          style: TextStyle(
                            color: Colours.color_theme,
                            fontSize: 14.sp,
                          ),
                        ),
                        style: ButtonStyle(
                          tapTargetSize: MaterialTapTargetSize.shrinkWrap,
                          minimumSize: MaterialStateProperty.all(Size(80.w, 30.w)),
                          padding: MaterialStateProperty.all(EdgeInsets.all(0)),
                          side: MaterialStateProperty.all(BorderSide(width: 1.w, color: Colours.color_theme)),
                          shape: MaterialStateProperty.all(RoundedRectangleBorder(borderRadius: BorderRadius.circular(5.w))),
                        ),
                      ),
                    ],
                  ),
                ],
              ),
            ),
            Visibility(
              visible: (controller.entity?.remake ?? "").isNotEmpty,
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Divider(
                    color: Colours.color_divider,
                    height: 1.w,
                    thickness: 1.w,
                  ),
                  Padding(
                    padding: EdgeInsets.symmetric(vertical: 8.w, horizontal: 16.w),
                    child: Text(
                      controller.entity?.remake ?? "",
                      style: TextStyle(
                        color: Colours.color_cfcfd5,
                        fontSize: 12.sp,
                      ),
                      maxLines: 1,
                      overflow: TextOverflow.ellipsis,
                    ),
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }

  Widget buildOrderCountWidget(VehicleDetailsController controller) {
    return SliverToBoxAdapter(
      child: Padding(
        padding: EdgeInsets.symmetric(vertical: 10.w, horizontal: 16.w),
        child: Text(
          "司机信息(${controller.orderCount})",
          style: TextStyle(
            color: Colours.color_text_theme,
            fontSize: 14.sp,
          ),
        ),
      ),
    );
  }

  Widget buildContentWidget(VehicleDetailsController controller) {
    return controller.driverInfoList.isNotEmpty
        ? SliverList(
            delegate: SliverChildBuilderDelegate(
              (context, index) {
                return buildItemWidget(controller, index);
              },
              childCount: controller.driverInfoList.length,
            ),
          )
        : SliverFillRemaining(
            child: getMultiStateWidget(controller),
          );
  }

  Widget getMultiStateWidget(VehicleDetailsController controller) {
    switch (controller.multiState) {
      case MultiState.loading:
        return DefaultLoadingWidget();
      case MultiState.empty:
        return DefaultEmptyWidget();
      case MultiState.fail:
        return DefaultFailWidget();
      case MultiState.error:
        return DefaultErrorWidget(
          onRetry: () {
            controller.onRetry();
          },
        );
      default:
        return Container();
    }
  }

  Widget buildItemWidget(VehicleDetailsController controller, int index) {
    DriverInfoItem entity = controller.driverInfoList[index];
    return Container(
      margin: EdgeInsets.only(left: 16.w, right: 16.w, bottom: 12.w),
      decoration: BoxDecoration(
        color: Colours.color_white,
        borderRadius: BorderRadius.circular(10.w),
      ),
      child: ClipRRect(
        borderRadius: BorderRadius.circular(10.w),
        child: Material(
          child: InkWell(
            onTap: () {
              controller.goToDriverDetailsPage(entity.id);
            },
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Padding(
                  padding: EdgeInsets.symmetric(vertical: 10.w, horizontal: 16.w),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Row(
                        mainAxisAlignment: MainAxisAlignment.spaceBetween,
                        children: [
                          Row(
                            mainAxisSize: MainAxisSize.min,
                            children: [
                              Text(
                                entity.name ?? "",
                                style: TextStyle(
                                  color: Colours.color_text_theme,
                                  fontSize: 16.sp,
                                  fontWeight: FontWeight.bold,
                                ),
                              ),
                              Visibility(
                                visible: (entity.belongingType ?? "").isNotEmpty,
                                child: Container(
                                  margin: EdgeInsets.only(left: 8.w),
                                  padding: EdgeInsets.only(left: 5.w, right: 5.w, bottom: 1.w),
                                  decoration: BoxDecoration(
                                    color: (entity.belongingType ?? "") == Constant.OWN_DRIVER ? Colours.color_34c759 : Colours.color_theme,
                                    borderRadius: BorderRadius.circular(5.w),
                                    border: Border.all(width: 1.w, color: (entity.belongingType ?? "") == Constant.OWN_DRIVER ? Colours.color_34c759 : Colours.color_theme),
                                  ),
                                  child: Text(
                                    entity.belongingTypeName ?? "",
                                    style: TextStyle(
                                      color: Colours.color_white,
                                      fontSize: 10.sp,
                                    ),
                                  ),
                                ),
                              ),
                              Visibility(
                                visible: entity.ifCardModel == 1,
                                child: Container(
                                  margin: EdgeInsets.only(left: 8.w),
                                  padding: EdgeInsets.only(left: 5.w, right: 5.w, bottom: 1.w),
                                  decoration: BoxDecoration(
                                    color: Colours.color_white,
                                    borderRadius: BorderRadius.circular(5.w),
                                    border: Border.all(width: 1.w, color: Colours.color_6f7082),
                                  ),
                                  child: Text(
                                    "卡账户",
                                    style: TextStyle(
                                      color: Colours.color_6f7082,
                                      fontSize: 10.sp,
                                    ),
                                  ),
                                ),
                              ),
                            ],
                          ),
                          Visibility(
                            visible: entity.bindingState ?? false,
                            child: TextButtonWithIcon(
                              onPressed: () {
                                showUnboundDialog(controller, entity.id);
                              },
                              icon: Image.asset("images/ic_unbound.png"),
                              label: Text(
                                "解绑",
                                style: TextStyle(
                                  color: Colours.color_6f7082,
                                  fontSize: 14.sp,
                                ),
                              ),
                              textIconPadding: 3.w,
                              style: ButtonStyle(
                                tapTargetSize: MaterialTapTargetSize.shrinkWrap,
                                minimumSize: MaterialStateProperty.all(Size(0, 0)),
                                padding: MaterialStateProperty.all(EdgeInsets.all(0.w)),
                              ),
                            ),
                          ),
                        ],
                      ),
                      SizedBox(
                        height: ((entity.motorcadeName ?? "").isNotEmpty || (entity.phone ?? "").isNotEmpty) ? 10.w : 0,
                      ),
                      Row(
                        children: [
                          TextWithIcon(
                            text: entity.phone ?? "",
                            iconName: "images/ic_phone.png",
                            iconHeight: 14.w,
                            iconWidth: 14.w,
                            iconColor: Colours.color_6f7082,
                            textStyle: TextStyle(color: Colours.color_6f7082, fontSize: 12.sp),
                            textIconPadding: 5.w,
                          ),
                          Visibility(
                            visible: (entity.motorcadeName ?? "").isNotEmpty,
                            child: Text(
                              "  l  ",
                              style: TextStyle(color: Colours.color_e7e7ea, fontSize: 12.sp),
                            ),
                          ),
                          Visibility(
                            visible: (entity.motorcadeName ?? "").isNotEmpty,
                            child: Flexible(
                              child: TextWithIcon(
                                text: entity.motorcadeName ?? "",
                                iconName: "images/ic_motorcade.png",
                                iconHeight: 14.w,
                                iconWidth: 14.w,
                                iconColor: Colours.color_6f7082,
                                textStyle: TextStyle(color: Colours.color_6f7082, fontSize: 12.sp),
                                textIconPadding: 5.w,
                              ),
                            ),
                          ),
                        ],
                      ),
                      SizedBox(
                        height: (entity.subCompanyList ?? []).isNotEmpty ? 5.w : 0,
                      ),
                      FlexibleIconText(
                        icon: Image.asset(
                          "images/ic_company.png",
                          height: 14.w,
                          width: 14.w,
                          color: Colours.color_6f7082,
                        ),
                        textList: entity.subCompanyList,
                        iconTextPadding: 5.w,
                      ),
                    ],
                  ),
                ),
                Visibility(
                  visible: (entity.remake ?? "").isNotEmpty,
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [
                      Divider(
                        color: Colours.color_divider,
                        height: 1.w,
                        thickness: 1.w,
                      ),
                      Padding(
                        padding: EdgeInsets.symmetric(
                          vertical: 10.w,
                          horizontal: 16.w,
                        ),
                        child: Text(
                          entity.remake ?? "",
                          style: TextStyle(
                            color: Colours.color_cfcfd5,
                            fontSize: 12.sp,
                          ),
                          maxLines: 1,
                          overflow: TextOverflow.ellipsis,
                        ),
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),
        ),
      ),
    );
  }

  void showUnboundDialog(VehicleDetailsController controller, String? id) {
    showCupertinoDialog(
      barrierDismissible: true,
      context: Get.context!,
      builder: (c) {
        return CupertinoAlertDialog(
          content: Text(
            "是否解绑该司机?",
            style: TextStyle(
              color: Colours.color_text_theme,
              fontSize: 14.sp,
            ),
          ),
          actions: [
            CupertinoDialogAction(
              child: Text(
                "取消",
                style: TextStyle(color: Colours.color_6f7082, fontSize: 14.sp),
              ),
              onPressed: () {
                //Navigator.pop(c);
                Get.back();
              },
            ),
            CupertinoDialogAction(
              child: Text(
                "确定",
                style: TextStyle(color: Colours.color_theme, fontSize: 14.sp),
              ),
              onPressed: () {
                //Navigator.pop(c);
                Get.back();
                controller.unboundDriver(id);
              },
            ),
          ],
        );
      },
    );
  }
}
